#ifndef GSOAPAPI_H
#define GSOAPAPI_H

// gSoap lib import
#include "../gSoapFoundation/soapStub.h"
#include "../gSoapFoundation/soapH.h"

#define BACKLOG 100
//#define MAX_THREAD 5
#define MAX_THREAD 1

//#define MAX_THREAD_CTRL 2
#define MAX_QUEUE 1000

////***************接口函数部分********************************
////测试用
//extern int testFoundation(soap *,struct UserInfo userInfo,struct UserInfo &returnnfo);

///**
// * @brief setUToolActive    工具坐标系切换 (0~9)
// * @param userInfo          用户信息
// * @param n                 切换编号
// * @param returnFlag        默认返回(RECV OK)
// * @return
// */
//extern int setUToolActive(soap *, struct UserInfo userInfo,int number,int &returnFlag);

///**
// * @brief setUFrameActive   用户坐标系切换(0~9)
// * @param userInfo          用户信息
// * @param n                 切换编号
// * @param returnFlag        默认返回(RECV OK)
// * @return
// */
//extern int setUFrameActive(soap *, struct UserInfo userInfo,int number,int &returnFlag);

///**
// * @brief getUFrameActive 获取激活的工具坐标系号码(0~9)
// * @param n
// * @param returnUToolNum
// */
//extern int getUToolActive(soap *, struct UserInfo userInfo,int &returnUToolNum);

///**
// * @brief getUFrameActive 获取激活的用户坐标系号码(0~9)
// * @param n
// * @param returnUFrameNum
// */
//extern int getUFrameActive(soap *, struct UserInfo userInfo,int &returnUFrameNum);

///**
// * @brief UpdateControllerInfoLevel hmi获取更新数据函数
// *
// * Level1   基础配置数据
// * Level2   普通状态类信息,点位信息,文件信息
// * Level3   io相关数据
// * Message  消息数据
// *
// * returnInfo 返回信息类型未定(待定)
// * @return
// */
//extern int updateControllerInfoLevel1(soap *, struct UserInfo userInfo, int currentRobotId, struct UpdateDataLv1 &updateDataLv1);
//extern int updateControllerInfoLevel2(soap *, struct UserInfo userInfo,struct UpdateDataLv2 &updateDataLv2);
//extern int updateControllerInfoLevel3(soap *, struct UserInfo userInfo,struct UpdateDataLv3 &updateDataLv3);
//extern int updateControllerMessage(soap *, struct UserInfo userInfo,std::vector<struct Message> &messageVector);

///**
// * @brief initControllerStatus      控制器的初始化状态返回 0:未初始化完成(正在初始化) 1:完成 2:失败
// * @param userInfo
// * @param initStatus
// * @return
// */
//extern int initControllerStatus(soap *, struct UserInfo userInfo,int &initStatus);

///**
// * @brief UpdateUserProgramFile     更新用户程序
// * @param fileName                  程序名
// * @param md5                       MD5校验码
// * @param returnFlag
// * @return
// */
//extern int updateUserProgramFile(soap *, struct UserInfo userInfo,std::string fileName,std::string md5,int &returnFlag);

///**
//  * @brief 			把关节坐标转换为笛卡尔坐标或者把笛卡尔坐标转换为关节坐标
//  * @param inputPointPro	输入的点位信息
//  * @return　PointPro		转换后的点位数据
//  */
//extern int changePointType(soap *,struct UserInfo userInfo,struct PointPro inputPointPro,struct PointPro &pointPro);

///**
// * @brief changePasswd                     修改密码，管理员可以更改所有的的密码，普通用户只能修改普通用户密码
// * @param userInfo                  用户信息
// * @param oldPassed                    旧密码
// * @param newPasswd			新密码
// * @return				0标示失败,1标示成功
// */
//extern int changePasswd(soap *,struct UserInfo userInfo,int changeAccount,std::string oldPassed,std::string newPasswd,int &returnFlag);

///**
// * @brief loginController                     修改密码，管理员可以更改所有的的密码，普通用户只能修改普通用户密码
// * @param userInfo                  用户信息
// * @return				0标示失败,1标示成功
// */
//extern int loginController(soap *,struct UserInfo userInfo,std::string hmiVersion,int &returnFlag);

///**
// * @brief setDo                     设置DO
// * @param ioOutNum                  DO号
// * @param nOffOn                    ON OFF
// * @param returnFlag
// * @return
// */
//extern int setDo(soap *, struct UserInfo userInfo,int ioOutNum,int nOffOn,int &returnFlag);

///**
// * @brief setManualSpeedPercent     设置 manual速度百分比
// * @param nSpeedValue
// * @param returnFlag
// * @return
// */
//extern int setManualSpeedPercent(soap *, struct UserInfo userInfo,float nSpeedValue,int &returnFlag);
///**
// * @brief setManualSpeedPercent     设置 auto速度百分比
// * @param nSpeedValue
// * @param returnFlag
// * @return
// */
//extern int setAutoSpeedPercent(soap *, struct UserInfo userInfo, float nSpeedValue, int &returnFlag);

///**
// * @brief setHandWheel              滚轮
// * @param axisNumber                轴
// * @param direction                 方向
// * @param velocity                  增量速度
// * @param returnFlag
// * @return
// */
//extern int setHandWheel(soap *,struct UserInfo userInfo,int axisNumber,int direction,int velocity,int &returnFlag);

///**
// * @brief jogRun                    寸动
// * @param axisNumber                轴
// * @param direction                 方向
// * @param returnFlag
// * @return
// */
//extern int jogRun(soap *, struct UserInfo userInfo,int axisNumber,int direction,int &returnFlag);

///**
// * @brief setProgramFileName        设置程序运行filename
// * @param programFileName
// * @param returnFlag
// * @return
// */
//extern int setProgramFileName(soap *, struct UserInfo userInfo,std::string programFileName,int &returnFlag);

///**
// * @brief setProgramRunLine         设置程序运行 行
// * @param line
// * @param returnFlag
// * @return
// */
//extern int setProgramRunLine(soap *, struct UserInfo userInfo,int line,int &returnFlag);

///**
// * @brief setRunModel               程序运行的模式设置
// * @param runModel                  0 T1手动\1 T2手动\2 自动\3 EX
// * @param returnFlag
// * @return
// */
//extern int setRunModel(soap *, struct UserInfo userInfo,int runModel,int &returnFlag);

///**
// * @brief setDebugModel             手动调试的模式设置
// * @param debugModel                0 连续\1 单步
// * @param returnFlag
// * @return
// */
//extern int setDebugModel(soap *, struct UserInfo userInfo,int debugModel,int &returnFlag);

///**
// * @brief setJogCoordinator         关节/全局/工具/用户坐标 设置
// * @param coordinator               0   1   2    3
// * @param returnFlag
// * @return
// */
//extern int setJogCoordinator(soap *, struct UserInfo userInfo,int coordinator,int &returnFlag);

///**
// * @brief moveToPoint		移动到点
// * @param userInfo			用户信息
// * @param moveParameter		移动到点的点位信息参数
// * @param returnFlag		返回状态标志位
// * @return
// */
//extern int moveToPoint(soap *,struct UserInfo userInfo,struct MoveParameter moveParameter,int &returnFlag);


///**
// * @brief stepRun                   运行(底部按钮)
// * @return
// */
//extern int programRun(soap *, struct UserInfo userInfo,int &returnFlag);

///**
// * @brief ceaseRun                  暂停(底部按钮)
// * @return
// */
//extern int programCease(soap *, struct UserInfo userInfo,int &returnFlag);

///**
// * @brief resetRun                  重置(stop)(底部按钮)
// * @return
// */
//extern int programReset(soap *, struct UserInfo userInfo,int &returnFlag);

///**
// * @brief returnZeroPoint           回零
// * @param userInfo
// * @param axisNumber
// * @return
// */
//extern int returnZeroPoint(soap *, struct UserInfo userInfo,int axisNumber,int &returnFlag);


///**
// * @brief returnZeroPoint           回零
// * @param userInfo
// * @param axisNumber
// * @return
// */
//extern int returnAllZeroPoint(soap *, struct UserInfo userInfo,int &returnFlag);
///**
// * @brief controllerShutDown        关机指令
// * @param userInfo
// * @param returnFlag
// * @return
// */
//extern int controllerShutDown(soap *, struct UserInfo userInfo,int &returnFlag);


///**
// * @brief setManualServon           设置伺服使能
// * @param userInfo
// * @param nServOffOn
// * @param returnFlag
// * @return
// */
//extern int setManualServon(soap *, struct UserInfo userInfo,int nServOffOn,int &returnFlag);


///**
// * @brief setRegisterNumber         输入注册码
// * @param registerString
// * @return
// */
//extern int setRegisterNumber(soap *, struct UserInfo userInfo,std::string registerString,struct  RegisterStatus &returnStatus);


///**
// * @brief getTcpConnectState        获取当前是否断开链接
// * @param userInfo
// * @param returnFlag
// * @return
// */
//extern int getTcpConnectState(soap *, struct UserInfo userInfo,int &returnFlag);


///**
// * @brief setClearAllCounter        清空所有产量
// * @param userInfo
// * @param returnFlag
// * @return
// */
//extern int setClearAllCounter(soap *, struct UserInfo userInfo,int &returnFlag);

///**
// * @brief setClearCurrentCounter    清空当前产量
// * @param userInfo
// * @param returnFlag
// * @return
// */
//extern int setClearCurrentCounter(soap *, struct UserInfo userInfo,int &returnFlag);


///**
// * @brief setRestoreFactory         恢复出厂设置
// * @param userInfo
// * @param returnFlag
// * @return
// */
//extern int setRestoreFactory(soap *, struct UserInfo userInfo,int &returnFlag);


///**
// * @brief setCoordMode              坐标系设置
// * @param userInfo
// * @param nCoordId
// * @param returnFlag
// * @return
// */
//extern int setCoordMode(soap *, struct UserInfo userInfo,int nCoordId,int &returnFlag);


///**
// * @brief setMsgClear               设置清除消息
// * @param userInfo
// * @param messageId
// * @param returnFlag
// * @return
// */
//extern int setMsgClear(soap *, struct UserInfo userInfo,int messageId,int &returnFlag);



///**
// * @brief SetSingleCaliber          零点标定设置
// * @param userInfo
// * @param asixId
// * @param returnFlag
// * @return
// */
//extern int setSingleCaliber(soap *, struct UserInfo userInfo,int asixId,int &returnFlag);
///**
// * @brief SetAllCaliber             零点标定设置
// * @param userInfo
// * @param asixId
// * @param returnFlag
// * @return
// */
//extern int setAllCaliber(soap *, struct UserInfo userInfo,int &returnFlag);


///**
// * @brief clearPlRegister           清空栈板暂存器
// * @param userInfo
// * @param palletNumber
// * @param returnFlag
// * @return
// */
//extern int clearPlRegister(soap *, struct UserInfo userInfo,int palletNumber,int &returnFlag);

////
///**
// * @brief setPlRegister             栈板寄存器修改生效
// * @param userInfo
// * @param palletNumber
// * @param rowColumnLayer
// * @param returnFlag
// * @return
// */
//extern int setPlRegister(soap *, struct UserInfo userInfo, int palletNumber, PlRegStruct plReg, int &returnFlag);

///**
// * @brief clearAllPlRegister        清空Pl寄存器
// * @param userInfo
// * @param returnFlag
// * @return
// */
//extern int clearAllPlRegister(soap *, struct UserInfo userInfo,int &returnFlag);


///**
// * @brief setLocalRegister          设置局部寄存器
// * @param userInfo
// * @param number
// * @param value
// * @param returnFlag
// * @return
// */
//extern int setLocalRegister(soap *, struct UserInfo userInfo,int number, float value,int &returnFlag);
///**
// * @brief clearAllLocalRegister     清除所有局部寄存器
// * @param userInfo
// * @param returnFlag
// * @return
// */
//extern int clearAllLocalRegister(soap *, struct UserInfo userInfo,int &returnFlag);
///**
// * @brief setGlobalRegister         设置全局寄存器
// * @param userInfo
// * @param number
// * @param value
// * @param returnFlag
// * @return
// */
//extern int setGlobalRegister(soap *, struct UserInfo userInfo,int number, float value,int &returnFlag);
///**
// * @brief clearAllGlobalRegister    清除所有全局寄存器
// * @param userInfo
// * @param returnFlag
// * @return
// */
//extern int clearAllGlobalRegister(soap *, struct UserInfo userInfo,int &returnFlag);


///**
// * @brief clearAllPrRegister        清除所有PR寄存器
// * @param userInfo
// * @param returnFlag
// * @return
// */
//extern int clearAllPrRegister(soap *, struct UserInfo userInfo,int &returnFlag);
///**
// * @brief setPrRegister             设置PR寄存器
// * @param userInfo
// * @param number
// * @param point
// * @param returnFlag
// * @return
// */
//extern int setPrRegister(soap *, struct UserInfo userInfo,int number,struct PointPro point,int &returnFlag);


///**
// * @brief updateControllerProgram               发送升级包
// * @param userInfo
// * @param fileLocation
// * @param returnFlag
// * @return
// */
////extern int updateControllerProgram(soap *, struct UserInfo userInfo,std::string fileLocation,int &returnFlag);

///**
// * @brief restoreControllerProgramBackupFile    还原
// * @param userInfo
// * @param fileLocation
// * @param returnFlag
// * @return
// */
////extern int restoreControllerProgramBackupFile(soap *, struct UserInfo userInfo,std::string fileLocation,int &returnFlag);

///**
// * @brief backupControllerProgram               备份
// * @param userInfo
// * @param fileLocation
// * @param returnFlag
// * @return
// */
//extern int backupControllerProgram(soap *, struct UserInfo userInfo,std::string fileLocation,int &returnFlag);

///**
// * @brief RestoreFactory                        恢复出厂设置
// * @param userInfo
// * @param returnFlag
// */
////extern int restoreFactory(soap *, struct UserInfo userInfo,int &returnFlag);

///**
// * @brief setIpAddress                   设置ip地址
// * @param userInfo                       用户信息
// * @param controllerIpGroupInfo         ip用户组信息
// * @param returnFlag
// * @return
// */
//extern int setIpAddress(soap *, struct UserInfo userInfo,struct ControllerIpGroupInfo controllerIpGroupInfo,int &returnFlag);

///**
// * @brief setMacAddress                 设置mac地址
// * @param userInfo                      用户信息
// * @param macAddress                    mac地址
// * @param returnFlag
// * @return
// */
//extern int setMacAddress(soap *, struct UserInfo userInfo,std::string macAddress,int &returnFlag);
///**
// * @brief readDefaultFileName           读取缺省文件
// * @param userInfo                      用户信息
// * @param returnFlag
// * @return
// */
//extern int readDefaultFileName(  soap*, struct UserInfo userInfo, std::string &returnName);

///**
// * @brief setLanguage 切换语言
// * @param userInfo
// * @param languageID
// * @param returnFlag
// * @return
// */
//extern int   setLanguage(  soap*, struct UserInfo userInfo, int languageID, int &returnFlag);

///**
// * @brief jogRunDog           		寸动 喂狗专用
// * @param userInfo                  用户信息
// * @return
// */
//extern int jogRunDog( soap*,struct UserInfo userInfo,int &returnFlag);

////(2017.02.10修改)新添加接口
///**
// * @brief calculateToolCoordinate 计算工具坐标系
// * @param resultToolCoordinate
// */
//extern int calculateToolCoordinate(soap*,struct UserInfo userInfo, int robotID, struct HmiToolCoordinateInformation sendToolCoordinate,struct HmiToolCoordinateInformation &resultToolCoordinate);

///**
// * @brief calculateUserCoordinate 计算用户坐标系
// * @return resultUserCoordinate
// */
//extern int calculateUserCoordinate(soap*,struct UserInfo userInfo, int robotID, struct HmiUserCoordinateInformation sendUserCoordinate,struct HmiUserCoordinateInformation &resultUserCoordinate);

///**
// * @brief setMsgClear               清除所有消息
// * @param userInfo
// * @param returnFlag
// * @return
// */
//extern int setAllMsgClear(soap*,struct UserInfo userInfo,int &returnFlag);


///**
// * @brief setSo                     设置SO
// * @param soNum						SO号
// * @param nOffOn                    ON OFF
// * @param returnFlag
// * @return
// */
//extern int setSo(soap*,struct UserInfo userInfo,int soNum,int nOffOn,int &returnFlag);

///**
// * @brief setAo                     设置AO
// * @param aoNum						AO号
// * @param aoValue                   AO值
// * @param returnFlag
// * @return
// */
//extern int setAo(soap*,struct UserInfo userInfo,int aoNum,float aoValue,int &returnFlag);

///**
// * @brief changeAxisLimit			设置 软限位
// * @param changeLimit				软限位值
// * @return
// */
//extern int changeAxisLimit(soap*,struct UserInfo userInfo,std::vector<struct AxisLimit> changeLimit,int &returnFlag);

///**
// * @brief getStoreStatus			hmi获取 存储状态
// * @return
// */
//extern int getStoreStatus(soap*,struct UserInfo userInfo,struct StoreStatus &storeStatus);//获取 存储状态

///**
// * @brief getToolCoordinateInformation 获取工具坐标系列表 2017-02-24添加
// * @param toolList
// */
//extern int getToolCoordinateInformation(soap*,struct UserInfo userInfo, int robotID, std::vector<struct HmiToolCoordinateInformation> &toolList);

///**
// * @brief getUserCoordinateInformation 获取用户坐标系列表 2017-02-24添加
// * @param userList
// */
//extern int getUserCoordinateInformation(soap*,struct UserInfo userInfo, int robotID, std::vector<struct HmiUserCoordinateInformation> &userList);

///**
// * @brief getStoreStatus			设置安全点值 2017-02-24添加
// * @return
// */
//extern int changeSafePoint(soap*,struct UserInfo userInfo,struct PointPro safePoint,int &returnFlag);

///**
// * @brief getStoreStatus			安全点开启关闭 2017-02-24添加
// * @return
// */
//extern int setSafePoint(soap*,struct UserInfo userInfo,bool value,int &returnFlag);

///**
// * @brief setTimerRegister			设置时间寄存器 2017-02-24添加
// * @return
// */
//extern int setTimerRegister(soap*,struct UserInfo userInfo,int timerNumber,int changeStatus,int &returnFlag);

//extern int setStartType(soap*,struct UserInfo userInfo,int type,int &returnFlag);

///**
// * @brief connectVrep				连接vrep
// * @return
// */
//extern int connectVrep(soap*,struct UserInfo userInfo,std::string ip,int port,int &returnFlag);

///**
// * @brief disconnectVrep			断开连接vrep
// * @return
// */
//extern int disconnectVrep(soap*,struct UserInfo userInfo,int &returnFlag);

///**
// * @brief setVrepServoType			设置vrep伺服模式
// * @return
// */
//extern int setVrepServoType(soap*,struct UserInfo userInfo,int type,int &returnFlag);

///**
// * @brief setVrepIoType				设置vrep IO模式
// * @return
// */
//extern int setVrepIoType(soap*,struct UserInfo userInfo,int type,int &returnFlag);

//extern int getWheelMoveSpeed(soap*,struct UserInfo userInfo,int robotIdIn, std::vector<double>&wheelMoveSpeed);

//extern int getWheelPathLength(soap*,struct UserInfo userInfo,int robotIdIn, std::vector<double>&wheelPathLength);


#endif // GSOAPAPI_H
